时间点指的是一个固定的日期或时间。与时间点有关的问题,比如从给定的日期时间中提取年、月、日或时间等。[大谦Excel,dqexcel点com]
从给定日期时间中提取单位对应的数字
【问题描述】
给定日期时间数据,提取年、月、日、小时、分钟或秒对应的数字。
【示例6-1】
本例使用的Excel文件的完整路径为“D:/Samples/ch06/时间点/提取单位对应的数字/提取生日.xlsx”。该文件打开后如图6-1所示,要求从“出生日期”列提取月份和日期,以”m月n日“的形式添加到“生日”列。
图6-1 出生日期
- 编写下面的代码:
code.python
import pandas as pd
# 定义Excel文件路径
file_path = "D:/Samples/ch06/时间点/提取单位对应的数字/提取生日.xlsx"
# 使用pandas读取Excel文件数据,引擎为openpyxl,读取第一个工作表
df = pd.read_excel(file_path, engine="openpyxl", sheet_name=0)
# 通过apply方法遍历每一行数据,从"出生日期"列提取月份和日期,以"m月n日"形式添加到新的"生日"列
df["生日"] = df["出生日期"].apply(lambda x: str(x.month) + "月" + str(x.day) + "日")
# 输出前5行数据,包含新增的"生日"列信息
print(df.head(5))
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出提取生日后的数据。
code.python
>>> == RESTART: D:/Samples/1.py =
姓名 出生日期 生日
0 李青 1987-08-20 8月20日
1 王涛 1988-10-02 10月2日
2 赵晓燕 1990-07-30 7月30日
3 何源 1989-02-18 2月18日
4 杜胜军 1979-11-09 11月9日
【知识点扩展】
使用数据类型为日期时间数据类型的Series对象的month属性提取某月,用day属性提取某日,如本例所示。
code.python
df["生日"] = df["出生日期"].apply(lambda x: str(x.month) + "月" + str(x.day) + "日")
其他,可以用year属性获取某年,用hour属性获取某小时,用minute属性获取某分,用second属性获取某秒。
apply方法的使用,请参见3.1.3小节通过数据转换得到新列的内容。
计算给定日期是星期几
【问题描述】
给定一个日期,计算这一天是星期几。
【示例6-2】
本例使用的Excel文件的完整路径为“D:/Samples/ch06/时间点/星期几/值班安排.xlsx”。该文件打开后如图6-2所示,计算“值班日期”列的日期是星期几。
图6-2 值班日期
- 编写下面的代码:
code.python
import pandas as pd
# 读取Excel文件中的数据,并通过”openpyxl”参数指定引擎为openpyxl
df = pd.read_excel(‘D:/Samples/ch06/时间点/星期几/值班安排.xlsx’,
sheet_name=’Sheet1’, engine=’openpyxl’, nrows=5)
# 计算“值班日期”列的日期是星期几,把得到的数字添加到”星期“列
df[‘星期’] = df[‘值班日期’].dt.dayofweek + 1
# 输出修改后的表数据
print(df)
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出添加“星期”列后的数据。
code.python
>>> == RESTART: D:/Samples/1.py =
姓名 值班日期 星期
0 孙小雨 2022-08-20 6
1 苏婷 2022-08-22 1
2 黄毅 2022-08-25 4
3 吴海波 2022-08-27 6
4 杜伊 2022-08-29 1
【知识点扩展】
使用Series对象的.dt.dayofweek属性获取日期对应的星期几数据。注意代码中在该数据的基础上加了1,因为获取的星期几数据是基于0的,即星期一对应的数字是0,所以要加上1。